// 使用相对路径导入
import { apiRequest } from '../utils/apiRequest.js';
const { get, post, put, del } = apiRequest;

// 处理包含循环引用的响应数据
function processResponse(response) {
  // 如果响应为空，直接返回
  if (!response) return response;

  // 简化处理：直接返回响应，不进行深度递归解析
  // 对于列表响应，处理$values
  if (response && response.$values) {
    // 直接使用$values，不进行深度处理
    const processedItems = response.$values || [];
    return {
      items: processedItems,
      totalCount: response.totalCount || processedItems.length
    };
  }

  return response;
}

// 物料API
const materialApi = {
  // 获取所有物料(带分页)
  // 获取所有物料(带分页)
  getAll: (params = {}) => {
    // 构建查询参数
    const queryParams = new URLSearchParams();
    if (params.page) queryParams.append('page', params.page);
    if (params.pageSize) queryParams.append('pageSize', params.pageSize);
    if (params.name) queryParams.append('name', params.name);
    if (params.firstLevelCategoryId) queryParams.append('firstLevelCategoryId', params.firstLevelCategoryId);
    if (params.secondLevelCategoryId) queryParams.append('secondLevelCategoryId', params.secondLevelCategoryId);

    const queryString = queryParams.toString();
    const url = queryString ? `/Materials?${queryString}` : '/Materials';

    return get(url)
      .then(response => processResponse(response));
  },

  // 获取单个物料
  getById: (id) => get(`/Materials/${id}`)
    .then(response => processResponse(response)),

  // 根据二级分类ID获取物料
  getBySecondLevelCategoryId: (secondLevelCategoryId) => get(`/Materials/BySecondLevelCategory/${secondLevelCategoryId}`)
    .then(response => processResponse(response)),

  // 添加物料
  add: (material) => {
    // 移除前端生成的id，由后端生成
    const { id, ...materialWithoutId } = material;
    return post('/Materials', materialWithoutId);
  },

  // 更新物料
  update: (id, material) => put(`/Materials/${id}`, material),

  // 删除物料
  delete: (id) => del(`/Materials/${id}`)
};

// 添加getMaterialList方法作为getAll的别名
materialApi.getMaterialList = materialApi.getAll;

export default materialApi;